package com.greate.community.controller.Background;

import com.greate.community.common.Result;
import com.greate.community.entity.User;
import com.greate.community.service.UserService;
import com.greate.community.util.CommunityUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 后台用户管理控制器
 * 提供用户的增删改查功能
 */
@RestController
@RequestMapping("/api/admin/user")
@CrossOrigin(origins = "http://localhost:5666")
public class BackgroundUserManageController {

    private static final Logger logger = LoggerFactory.getLogger(BackgroundUserManageController.class);

    @Autowired
    private UserService userService;

    /**
     * 获取用户列表
     * @param keyword 搜索关键词（用户名或邮箱）
     * @param status 用户状态（0-未激活，1-已激活）
     * @param page 当前页码
     * @param size 每页数量
     * @return 用户列表和分页信息
     */
    @GetMapping("/list")
    public Result<Map<String, Object>> getUserList(
            @RequestParam(required = false) String keyword,
            @RequestParam(required = false) Integer status,
            @RequestParam(defaultValue = "1") int page,
            @RequestParam(defaultValue = "10") int size) {
        
        // 查询用户列表 - 直接传递页码和每页大小，让Service层处理分页逻辑
        List<User> users = userService.searchUsers(keyword, status, null, page, size);
        
        // 查询总数
        int total = userService.getUserCount(keyword, status, null);
        
        // 构建返回数据
        Map<String, Object> result = new HashMap<>();
        result.put("users", users);
        result.put("total", total);
        
        return Result.success(result);
    }

/*    *//**
     * 获取用户详情
     * @param id 用户ID
     * @return 用户详情
     *//*
    @GetMapping("/{id}")
    public Result<User> getUserDetail(@PathVariable("id") int id) {
        User user = userService.findUserById(id);
        if (user == null) {
            return Result.error("用户不存在");
        }
        return Result.success(user);
    }*/
    
    /**
     * 添加用户
     * @param user 用户信息
     * @return 添加结果
     */
    @PostMapping("/add")
    public Result<Object> addUser(@RequestBody User user) {
        // 设置创建时间为当前时间，避免前端传入的日期格式问题
        user.setCreateTime(new Date());
        // 注册用户 - 已在UserService中设置为默认激活状态
        Map<String, Object> map = userService.register(user);
        
        if (map.isEmpty()) {
            return Result.success("用户添加成功");
        } else {
            String msg = map.containsKey("usernameMsg") ? (String) map.get("usernameMsg") : 
                       map.containsKey("passwordMsg") ? (String) map.get("passwordMsg") : 
                       (String) map.get("emailMsg");
            return Result.error(msg);
        }
    }
    
    /**
     * 更新用户信息
     * @param id 用户ID
     * @param user 用户信息
     * @return 更新结果
     */
    @PutMapping("update/{id}")
    public Result<Object> updateUser(@PathVariable("id") int id, @RequestBody User user) {
        // 检查用户是否存在
        User existingUser = userService.findUserById(id);
        if (existingUser == null) {
            return Result.error("用户不存在");
        }
        
        // 设置用户ID
        user.setId(id);
        
        // 如果密码不为空，则更新密码
        if (StringUtils.isNotBlank(user.getPassword())) {
            user.setSalt(CommunityUtil.generateUUID().substring(0, 5));
            user.setPassword(CommunityUtil.md5(user.getPassword() + user.getSalt()));
        } else {
            // 保持原密码和盐值不变
            user.setPassword(existingUser.getPassword());
            user.setSalt(existingUser.getSalt());
        }
        
        // 保持创建时间不变
        user.setCreateTime(existingUser.getCreateTime());
        
        try {
            userService.updateUser(user);
            return Result.success("用户信息更新成功");
        } catch (Exception e) {
            logger.error("更新用户信息失败: " + e.getMessage());
            return Result.error("更新用户信息失败");
        }
    }
    
    /**
     * 删除用户
     * @param id 用户ID
     * @return 删除结果
     */
    @DeleteMapping("/delete/{id}")
    public Result<Object> deleteUser(@PathVariable("id") int id) {
        // 检查用户是否存在
        User user = userService.findUserById(id);
        if (user == null) {
            return Result.error("用户不存在");
        }
        
        try {
            userService.deleteUser(id);
            return Result.success("用户删除成功");
        } catch (Exception e) {
            logger.error("删除用户失败: " + e.getMessage());
            return Result.error("删除用户失败");
        }
    }

}